/*
 * 版权所有:深圳中讯智能信息技术有限公司日 期:2017年3月15日
 */
package com.example.demo.utils;

import java.util.List;
import java.util.Map;

import javax.xml.crypto.dsig.keyinfo.KeyValue;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.serializer.JSONLibDataFormatSerializer;
import com.alibaba.fastjson.serializer.SerializeConfig;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.fastjson.serializer.SimplePropertyPreFilter;

/**
 * 类功能描述:
 * 
 * @author chengdongdong
 * @date 2017年3月15日
 * @version 1.0
 */
public class FastJsonUtils {
  
  private static final SerializeConfig config;
  
  static {
    config = new SerializeConfig();
    config.put(java.util.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
    config.put(java.sql.Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
  }
  
  private static final SerializerFeature[] features = { 
      SerializerFeature.WriteMapNullValue, // 输出空置字段
      SerializerFeature.WriteNullListAsEmpty, // list字段如果为null，输出为[]，而不是null
      SerializerFeature.WriteNullNumberAsZero, // 数值字段如果为null，输出为0，而不是null
      SerializerFeature.WriteNullBooleanAsFalse, // Boolean字段如果为null，输出为false，而不是null
      SerializerFeature.WriteNullStringAsEmpty, // 字符类型字段如果为null，输出为""，而不是null
      SerializerFeature.DisableCircularReferenceDetect
  };
  
  public static String toJSONString(Object object) {
    return JSON.toJSONString(object, config, features);
  }
  
  public static String toJSONStringFilter(Object object,String... properties ) {
    
    SimplePropertyPreFilter filter = new SimplePropertyPreFilter(object.getClass(),properties);
    
    return JSON.toJSONString(object, filter, features);
  }
  
  public static String toJSONNoFeatures(Object object) {
    return JSON.toJSONString(object, config);
  }
  
  public static Object toBean(String text) {
    return JSON.parse(text);
  }
  
  public static <T> T toBean(String text, Class<T> clazz) {
    return JSON.parseObject(text, clazz);
  }
  
  // 转换为数组
  public static <T> Object[] toArray(String text) {
    return toArray(text, null);
  }
  
  // 转换为数组
  public static <T> Object[] toArray(String text, Class<T> clazz) {
    return JSON.parseArray(text, clazz).toArray();
  }
  
  // 转换为List
  public static <T> List<T> toList(String text, Class<T> clazz) {
    return JSON.parseArray(text, clazz);
  }
  
  /**
   * 将javabean转化为序列化的json字符串
   * 
   * @param keyvalue
   * @return
   */
  public static Object beanToJson(KeyValue keyvalue) {
    String textJson = JSON.toJSONString(keyvalue);
    Object objectJson = JSON.parse(textJson);
    return objectJson;
  }
  
  /**
   * 将string转化为序列化的json字符串
   * 
   * @param keyvalue
   * @return
   */
  public static Object textToJson(String text) {
    Object objectJson = JSON.parse(text);
    return objectJson;
  }
  
  /**
   * json字符串转化为map
   * 
   * @param s
   * @return
   */
  @SuppressWarnings("rawtypes")
  public static Map stringToCollect(String s) {
    Map m = JSONObject.parseObject(s);
    return m;
  }
  
  /**
   * 将map转化为string
   * 
   * @param m
   * @return
   */
  @SuppressWarnings("rawtypes")
  public static String collectToString(Map m) {
    String s = JSONObject.toJSONString(m);
    return s;
  }
  
}
